import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.core.Application;
import mx.events.ValidationResultEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;            

 /**
 * @comment Variaveis para controle de dados referente as telas de pesquisas.
 * @author  Diego Leão Von Kruger Sureck
 */	
private var qtdeRegistros:int = 0;             
private var numeroPagina:int = 0;             
private var paginaAtual:int = 0;       
private var flControleConsulta:int = 0;  //Criado posteriormente    

[Bindable]
public var listaGrid:ArrayCollection;             
private var validar:String = ValidationResultEvent.VALID;             
          
 /**
 * @comment Método Padrão para controle de paginação.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function paginacao(flag:int):void {
	switch(flag) {
		case 1:
			paginaAtual = 0;
			lista(entidade, 0, true);
			primeiros.enabled = false;
			anteriores.enabled = false;
			ultimos.enabled = true;
			proximos.enabled = true;
			break;
		case 2:
			paginaAtual -= 1; 
			lista(entidade, paginaAtual, true);
			ultimos.enabled = true;
			proximos.enabled = true;
			if(paginaAtual == 0) {
				primeiros.enabled = false;
				anteriores.enabled = false;
			}
			break;
		case 3:
			paginaAtual += 1; 
			lista(entidade, paginaAtual, true);
			anteriores.enabled = true;
			primeiros.enabled = true;
			if((paginaAtual + 1) == numeroPagina) {
				ultimos.enabled = false;
				proximos.enabled = false;
			}
			break;
		default:
			paginaAtual = numeroPagina - 1;
			lista(entidade, paginaAtual, true);
			primeiros.enabled = true;
			anteriores.enabled = true;
			ultimos.enabled = false;
			proximos.enabled = false;
	}
	informacoesLista.text = resourceManager.getString('myResources', 'pesquisa.paginacao.msg1') + (paginaAtual + 1) + 
		resourceManager.getString('myResources', 'pesquisa.paginacao.msg2') + numeroPagina + 
		resourceManager.getString('myResources', 'pesquisa.paginacao.msg3') + qtdeRegistros;
}

 /**
 * @comment Método Padrão para retornar a tela de formulário.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function volta():void {
	entidade = null;                
	dispatchEvent(new Event(Event.CHANGE));                 
}             

 /**
 * @comment Método Padrão para validação de dados de formulário.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function handleValid(eventObj:ValidationResultEvent, flag:Boolean):void {
	if(validar == ValidationResultEvent.VALID) {
		validar = eventObj.type;
    }
	if(flag) 
    	if(validar == ValidationResultEvent.INVALID) { 
    		validar = ValidationResultEvent.VALID;
			Alert.show(resourceManager.getString('myResources', 'geral.validar.msg'));
    	} else procura();    
}

 /**
 * @comment Método Padrão para exclusão de item selecinado na listagem.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function remove():void {
	if(dataGrid.selectedItem != null) {
		Alert.show(resourceManager.getString('myResources', 'geral.excluir.msg1'), 
			resourceManager.getString('myResources', 'geral.confirmacao'), Alert.YES | Alert.NO , this, removeCompl);                    
			flControleConsulta = 1;//Criado posteriormente
	} else {                    
		Alert.show(resourceManager.getString('myResources', 'geral.selecione'));
	}           
}             

 /**
 * @comment Função que ser executada após a conclusão do método remove.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function onResultRemove(event:ResultEvent):void {
	var b:Boolean = event.result as Boolean;
	if(b) {
		Alert.show(resourceManager.getString('myResources', 'geral.excluir.msg2'));
	} else
		Alert.show(resourceManager.getString('myResources', 'geral.excluir.msg3'));
	Alert.yesLabel = resourceManager.getString('controls', 'yesLabel');
	Alert.noLabel = resourceManager.getString('controls', 'noLabel');
	Alert.cancelLabel = resourceManager.getString('controls', 'cancelLabel');
	procura();            
}             

 /**
 * @comment Função que ser executada após a conclusão do método getLista.
 * @author  Diego Leão Von Kruger Sureck
 */	            
private function onResultGetList(event:ResultEvent):void {
	listaGrid = event.result as ArrayCollection;
	var listaGrid2:ArrayCollection = event.result as ArrayCollection;
}             

 /**
 * @comment Função que ser executada após a conclusão do método listaQtde.
 * @author  Diego Leão Von Kruger Sureck
 */	            
private function onResultGetListQtde(event:ResultEvent):void {
	qtdeRegistros = event.result as int;
	if(qtdeRegistros <= Application.application.qtdeListareg) {
		proximos.enabled = false;
		ultimos.enabled = false;
		if(qtdeRegistros == 0 && flControleConsulta == 0) {
			numeroPagina = 0;
			primeiros.enabled = false;
			anteriores.enabled = false;
			Alert.show(resourceManager.getString('myResources', 'pesquisa.alert.lista.msg1'));
		} else {
			numeroPagina = 1;
			flControleConsulta = 0;  //Criado posteriormente
		}
	} else {
		numeroPagina = qtdeRegistros / Application.application.qtdeListareg;
		if(numeroPagina != 0) numeroPagina++; 
		proximos.enabled = true;
		ultimos.enabled = true;
	}
	if(qtdeRegistros > 0) {
		btEditar.enabled = true; 
		btClonar.enabled = true; 
		btExcluir.enabled = true;
		informacoesLista.text = resourceManager.getString('myResources', 'pesquisa.paginacao.msg1') + "1" + 
		resourceManager.getString('myResources', 'pesquisa.paginacao.msg2') + numeroPagina + 
		resourceManager.getString('myResources', 'pesquisa.paginacao.msg3') + qtdeRegistros.toString();
	} else {
		btEditar.enabled = false; 
		btClonar.enabled = false; 
		btExcluir.enabled = false;
		informacoesLista.text = "";
	}
}             

 /**
 * @comment Ocorreu uma falha ao chamar algum serviço.
 * @author  Diego Leão Von Kruger Sureck
 */	            
private function onFault(event:FaultEvent):void {                
	Alert.show(event.fault.message);            
}        

 /**
 * @comment Método Padrão para formatação de CNPJ na listagem.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function formatCNPJ(itemObj:Object, column:DataGridColumn):String {
	var itemStr:String = itemObj[column.dataField].toString();
	if(itemStr.length > 0)
    	return itemStr.substring(0, 2) + "." + itemStr.substring(2, 5) + "." + itemStr.substring(5, 8) + "/" + 
    		itemStr.substring(8, 12) + "-" + itemStr.substr(12);
    return "";
}